package fiuba.algo3.algothief;

import java.util.ArrayList;
import java.util.Iterator;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class Lugar {
	
	protected String nombre;
	private ArrayList<Pista> pistas;
	
	public Lugar(String nombre){
		this.nombre = nombre;
		pistas = new ArrayList<Pista>();
	}
	

	public String getNombre() {
		return nombre;
	}
	
	
	public void agregarPista(Pista pista){
		 this.pistas.add(pista);
	}
	
	
	public Pista  getPista(JugadorNovato jugador){
		return buscarPistaSegunDificultad("facil");
	}
	
	
	public Pista  getPista(JugadorDetective jugador){
		return buscarPistaSegunDificultad("media");
	}
	
	
	public Pista  getPista(JugadorInvestigador jugador){
		return buscarPistaSegunDificultad("dificil");
	}
	
	
	public Pista  getPista(JugadorSargento jugador){
		return buscarPistaSegunDificultad("dificil");
	}
	
	
	private Pista buscarPistaSegunDificultad(String dificultad){
		Iterator<Pista> i = pistas.iterator();
		Pista pista = null;
		boolean encontroPista = false;
		while(i.hasNext() & !encontroPista){
			 pista = i.next();
			 if (pista.getDificultad() == dificultad){
				 encontroPista = true;}
			 }
		return pista;
	}
	
	
	public Element serializar(Document doc) {
		Element elementoLugar = doc.createElement("Lugar");
		elementoLugar.setAttribute("nombre", this.nombre);
		Element elementoPistas = doc.createElement("Pistas");
		elementoLugar.appendChild(elementoPistas);
		for (Pista pista : this.pistas) {
			elementoPistas.appendChild(pista.serializar(doc));
		}
		return elementoLugar;
	}
	
	
	public static Lugar hidratar(Node elementoLugar) {
		Lugar nuevoLugar = new Lugar("");
		nuevoLugar.nombre = ((Element)elementoLugar).getAttribute("nombre");
		Element elementoPistas = (Element)((Element)elementoLugar).getElementsByTagName("Pistas").item(0);
		for(int i=0; i< elementoPistas.getChildNodes().getLength(); i++) {
			Pista pista = Pista.hidratar(elementoPistas.getChildNodes().item(i));
			nuevoLugar.agregarPista(pista);
		}
		return nuevoLugar;
	}
	
}

